2014-01-24 3 views
-6

Этот вопрос связан с пониманием того, чего мы не знаем. Я изучаю «Почему люди не используют это»? Есть ли причина, по которой это связано с конкретными технологиями? Поэтому внимательно прочитайте его и дайте downvote или дайте правильный ответ.Доступ к классу доступа оператором точек

Мы можем написать

NSMutableString *string = NSMutableString.string; 

вместо

NSMutableString *string = [NSMutableString string]; 

То же, как мы можем написать этот метод,

NSMutableString *string = [NSMutableString stringWithString:@"test"]; 

Update:

Этот вопрос не является дубликатом, который немного отличается. И я согласен с нижеприведенными ответами, которые не рекомендуется для хороших программистов. Но они не объяснили Why, для What reason, programmers should avoid this? Не могли бы вы дать ясное объяснение об этом с помощью правильной ссылки или документа?

+1

'NSMutableString.string;' не должно использоваться. синтаксис '.' должен использоваться только для свойств, а не для обычных методов. Из-за того, что сообщения Objective-C вы классно, он также работает для методов без каких-либо параметров. Но это не значит, что нужно использовать таким образом. – rckoenes

+0

@rckoenes Мой друг, где вы видели «мы не должны использовать эту точку для метода класса»? Пожалуйста, покажите несколько ссылок. – Mani

+2

Это не свойство, а синтаксис '.' для свойств. Из документов Apple: [Objective-C предлагает альтернативный синтаксис точек доступа к свойствам объекта.] (Https://developer.apple.com/library/ios/documentation/cocoa/conceptual/ProgrammingWithObjectiveC/EncapsulatingData/EncapsulatingData.html # // apple_ref/doc/uid/TP40011210-CH5-SW10) – rckoenes

ответ

2

NSMutableString.string является взломом. Он «работает» по той же причине, что и myString.length, и [myString length] дают тот же результат. Однако, поскольку точечная нотация не используется с фактическим свойством, это злоупотребление языковой функцией, потому что свойства имеют другую семантику. Например, когда вы получаете доступ к свойству несколько раз, вы, естественно, ожидаете получить тот же результат, если только состояние объекта не изменилось между двумя вызовами. Так как NSMutableString.string создает новый строковый объект для каждого вызова, он разбивает семантику, ожидаемую от «правильных» свойств, что снижает читаемость вашей программы.

Objective-C не имеет общего способа вызова метода с аргументами с использованием точечной нотации. Функция очень специфична для свойств. Хотя теоретически вы могли бы использовать MyClass.xyz = abc вместо [MyClass setXyz:abc], но это тоже будет взломать.

Чтобы ответить на ваш вопрос, Objective-C не предлагает способ позвонить [NSMutableString stringWithString:@"test"] с точечной нотацией.

+0

Я могу частично согласиться с вами. Я думаю, что это утверждение «точечное обозначение не используется с фактическим свойством» не должно быть правильным. Как вы это говорите? Не могли бы вы показать ссылку или спецификации? – Mani

+0

См. Мой обновленный вопрос .. – Mani

+0

@Mani Я расширил ответ кратким примером того, что не так с вызовом 'NSMutableString.string' через синтаксис свойств. – dasblinkenlight

2

Это просто синтаксический сахар. string метод не имеет аргументов, поэтому он рассматривается как геттер, которого нет. stringWithString: - это метод с параметром, поэтому вы не можете так называть.

В общем, я бы не рекомендовал использовать точечный синтаксис с помощью методов, это сбивает с толку. Objective-C dot notation with class methods?

Update

Я не думаю, что есть какие-либо технические причины, вы должны избегать его. Это скорее в стиле кодирования, сохраняя код чистым и последовательным.

+0

Я принимаю с одной стороны, это не рекомендуется всем программистам. Мой вопрос: «почему»? для чего"?. Вы имели в виду «метод класса, который не с аргументом, рассматриваемый как метод геттера»? Это верно? – Mani

+0

См. Мой обновленный вопрос .... – Mani

+0

Мой друг, я знаю, что это неправильный стиль кодирования. Я изучаю «Почему люди не используют это»? Есть ли причина, связанная с конкретными технологиями? Мне нужно это знать. – Mani